package com.yc.fav.service.impl;

import com.yc.fav.MyBatisHelper;
import com.yc.fav.entity.FavFavorite;
import com.yc.fav.entity.FavTag;
import com.yc.fav.entity.FavTagFavorite;
import com.yc.fav.mapper.FavFavoriteMapper;
import com.yc.fav.mapper.FavTagFavoriteMapper;
import com.yc.fav.mapper.FavTagMapper;
import com.yc.fav.service.BizException;
import com.yc.fav.service.IFavFavoriteService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 云收藏-收藏表-6 服务实现类
 * </p>
 *
 * @author ly
 * @since 2022-11-06
 */
@Service
public class FavFavoriteServiceImpl extends ServiceImpl<FavFavoriteMapper, FavFavorite> implements IFavFavoriteService {
    public void  add(FavFavorite ff) throws BizException {
        // 数据验证
        if( ff.getFlabel() == null || ff.getFlabel().trim().isEmpty()){
            throw new BizException("请填写网页名称");
        }
        if( ff.getFurl() == null || ff.getFurl().trim().isEmpty()){
            throw new BizException("请填写网页地址");
        }
        SqlSession session = MyBatisHelper.getSession();
        try{
            FavFavoriteMapper favoriteMapper = session.getMapper(FavFavoriteMapper.class);
            FavTagMapper tagMapper = session.getMapper(FavTagMapper.class);
            FavTagFavoriteMapper tagFavoriteMapper = session.getMapper(FavTagFavoriteMapper.class);
            // 用户输入正确, 则写入链接表
            favoriteMapper.insert(ff);
            // 分析 ftags 字段包含的 tag 的值
            // tag = 购物,门户,新闻
            // fav_tag : 本身有 购物 : tcount + 1
            //           没有  门户,新闻 : 新增 并且tcount = 1
            // 在 fav_tag_favorite 表 添加 关系记录
            String ftags = ff.getFtags();
            if(ftags!=null && ftags.trim().isEmpty() == false){
                String[] tags = ftags.split("[,;，；]+");
                for (String tag : tags) {
                    // tagMapper.update(实体对象, 条件)
                    if( tagMapper.updateTcount(tag) == 0){
                        // 没有修改到数据库这条记录, 那么就要新增
                        FavTag ft = new FavTag();
                        ft.setTname(tag);
                        ft.setTcount(1);
                        tagMapper.insert(ft);
                        // 新增tag之后, 在关系表中添加记录
                        FavTagFavorite ftf = new FavTagFavorite();
                        // mybatis-plus 会返回新增的id值
                        ftf.setTid(ft.getId());  // tag 的 id
                        ftf.setFid(ff.getId());  // favorite 的id
                        tagFavoriteMapper.insert(ftf);
                    } else {
                        tagFavoriteMapper.insertByTname(ff.getId(), tag);
                    }
                }
            }
            session.commit();
        } catch ( Exception e) {
            session.rollback();
            if(e instanceof BizException){
                throw e;
            } else {
                throw new BizException("添加链接失败!",e);
            }
        } finally {
            session.close();
        }


    }
}
